[新機能]CI Jobの実行時にSQLFluffによるリンティングが行えるようになりました
さがらです。
dbt Cloudの新機能として、CI Jobの実行時にSQLFluffによるリンティングが行えるようになりました。
簡素な内容となりますが、どのように挙動するのかを本記事でまとめてみます。
事前準備
下記の内容に沿って、CI Jobを設定しておきます。
リンティング機能の有効化
※私の環境だけかもしれませんが、本機能がデフォルトで表示されていなかったため、サポートチケットをあげて表示させてもらうようにしました。
設定済のCI Jobの編集画面を開き、Execution settings
からLinting
にチェックを入れて有効化します。リンティングの処理でエラーが発生したときに、ジョブをそのまま続けるかどうかも選択可能です。
SQLFluffによるリンティングの確認
今回、事前にdbt projectのルート階層に.sqlfluff
を下記の内容で作成しておきました。
ポイントは、templater = dbt-cloud
とすることです。 ※サポートの方に問い合わせて教えて頂きました。将来的にはこの定義をしなくてもうまく起動するようになるとのことです。
[sqlfluff]
templater = dbt-cloud
# This change (from jinja to dbt templater) will make linting slower
# because linting will first compile dbt code into data warehouse code.
runaway_limit = 10
max_line_length = 80
indent_unit = space
[sqlfluff:indentation]
tab_space_size = 4
[sqlfluff:layout:type:comma]
spacing_before = touch
line_position = trailing
[sqlfluff:rules:capitalisation.keywords]
capitalisation_policy = lower
[sqlfluff:rules:aliasing.table]
aliasing = explicit
[sqlfluff:rules:aliasing.column]
aliasing = explicit
[sqlfluff:rules:aliasing.expression]
allow_scalar = False
[sqlfluff:rules:capitalisation.identifiers]
extended_capitalisation_policy = lower
[sqlfluff:rules:capitalisation.functions]
capitalisation_policy = lower
[sqlfluff:rules:capitalisation.literals]
capitalisation_policy = lower
[sqlfluff:rules:ambiguous.column_references] # Number in group by
group_by_and_order_by_style = implicit
この上で、下図のようにあるSQLファイルの内容をSQLFluffのルールにマッチしないようなものにあえて書き換え、プルリクエストを発行します。
すると、下図のようにCI Jobが走り、dbt build
の前にリンティング処理が走りエラーとなりました。今回はCI Jobでの輪ティング設定時にFail fob run
にしていたため、リンティングの後につづくbuild処理は動かない形となりました。
最後に
dbt Cloudの新機能として、CI Jobの実行時にSQLFluffによるリンティングが行えるようになったので試してみました。
以前私もdbt CloudからSQLFluffをCIで実行するために下記のブログを書いたことがありましたが、リンティングを行うことをだけであれば本記事の内容の方が圧倒的に楽ですね!